// pages/cart/cart.js
import {getCartList, updateCartNum, removeItem, selectall, selectone} from './../../api/cart'
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    cartlist: [],
    hasPro: false,
    totalPrice: 0,
    totalNum: 0,
    all: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log('onload')
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    console.log('onShow')
    getCartList({ userid: app.globalData.userid }).then(res => {
      console.log(res)
      if (res.data.code === '10020') {
        this.setData({
          hasPro: false
        })
      } else {
        // 全部为真则为真，又一个为假则为假 --- 全选是否要被选中
        const all = res.data.data.every(item => item.flag)
        this.setData({
          cartlist: res.data.data,
          hasPro: true,
          all
        })
        
        this.count()
      }
    })
  },
  changeItem (e) {
    selectone({ // 更新数据库当前数据是不是被选中
      cartid: e.currentTarget.dataset.cartid,
      flag: e.detail
    }).then(() => {
      // 省一次服务器请求
      const arr = this.data.cartlist // 备份数据
      arr[e.currentTarget.dataset.index].flag = e.detail // 修改的本地数据 --- 展示效果
      const all = arr.every(item => item.flag) // 判断全选是不是被选中
      this.setData({
        cartlist: arr,
        all
      })
      // 不省服务器
      // this.onShow()
    })
  },
  changeAll (e) {
    console.log(e)
    // 更新数据库，如果选择为未选中，更新数据库的所有的数据都不被选中，反之则都被选中
    selectall({
      userid: app.globalData.userid,
      type: e.detail
    }).then(res => {
      // this.setData({
      //   all: e.detail
      // })
      this.onShow()
    })
  },
  reduce (e) {
    updateCartNum({
      cartid: e.currentTarget.dataset.cartid,
      num: e.currentTarget.dataset.num > 1 ?  e.currentTarget.dataset.num - 1 : 1
    }).then(res => {
      this.onShow()
    })
  },
  add (e) {
    updateCartNum({
      cartid: e.currentTarget.dataset.cartid,
      num:e.currentTarget.dataset.num + 1
    }).then(res => {
      this.onShow()
    })
  },
  deleteItem (e) {
    console.log(1)
    removeItem({
      cartid: e.currentTarget.dataset.cartid,
    }).then(res => {
      this.onShow()
    })
  },
  count () {
    const totalPrice = this.data.cartlist.reduce((sum, item) => {
      return  item.flag ? sum + item.originprice * item.num : sum + 0
    }, 0)
    const totalNum = this.data.cartlist.reduce((sum, item) => {
      return  item.flag ? sum + item.num : sum + 0
    }, 0)
    this.setData({
      totalPrice: totalPrice * 100,
      totalNum
    })
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    console.log('onHide')
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})